Многие функции в Win32 API являются функциями обратного вызова. Например, функция перечисления дочерних окон. В эти функции обычно передается указатель на функцию которая вызывается. В VB для передачи указателя используется оператор AddressOf.
AddressOf procedurename
Давайте используя ее и попробуем реализовать перечисления дочерних окон. Описываем функции Win32 API.
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Public Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As Long, ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Реализуем функцию обратного вызова.
Public Function EnumWindowProc(ByVal hwnd As Long, ByVal lParam As Long) As Long Dim buff As String * 255 Debug.Print "Enum" GetWindowText hwnd, buff, 255 Form1.List1.AddItem buff EnumWindowProc = True End Function
Вызываем ее при нажатии на кнопку на форме.
Private Sub Command1_Click() List1.Clear Dim lParam As Long EnumChildWindows Me.hwnd, AddressOf EnumWindowProc, lParam End Sub
Смотрим результат
Вообщем то сложностей не каких, достаточно правильно описать функцию обратного вызова.